#ifndef __RX8025_H__
#define __RX8025_H__

#include <Hardware.h>

typedef struct tm TIME_TM;

#define NOW_MDAY 0x04 // 日
#define SYNC_DAY 0x08 // 0x08-0x0c是RX8025中未用的alarm寄存器，可以借用

/**
 * @brief 同步网络时间
*/
void syncTime();

class RX8025
{
public:
    /**
     * @brief 初始化
     */
    void begin();
    /**
     * @brief 取时分
     * @return bcd格式时分，bit0-7分钟，bit8-15小时
     */
    int getHMTime();
    /**
     * @brief 设置日期和时间
     * @param tm 需要设置的日期和时间
     */
    void setTime(TIME_TM *tm);
    /**
     * @brief 取日期和时间
     * @param tm 保存取得的日期和时间
     */
    void getTime(TIME_TM *tm);
    /**
     * @brief 设置日期和时间，以unix格式
     * @param now 以time_t表示的unix格式的日期时间
     */
    void setTime(time_t now);
    /**
     * @brief 取日期和时间
     * @return 以time_t表示的unix格式的日期时间
     */
    time_t getTime();

    /**
     * @brief 从指定地址读出单个字节数据
     * @param 地址
     * @return 读到的数值
     */
    uint8_t getData(uint8_t regaddr);

    /**
     * @brief 将数据写入指定地址
     * @param regaddr 地址
     * @param value 要写入的数值
     */
    void setData(uint8_t regaddr, uint8_t value);
};

extern RX8025 rxTime;

#endif